package com.saydc.actions.unidadOrganizativa;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.saydc.dao.EmpleadosDAO;
import com.saydc.dao.UnidadOrganizativaDAO;
import com.saydc.exceptions.UnableToDeleteException;
import com.saydc.forms.unidadOrganizativa.ActualizaUnidadOrganizativaForm;
import com.saydc.model.Empleado;
import com.saydc.model.UnidadOrganizativa;

public class AccionUnidadOrganizativaAction extends DispatchAction {
	
	@SuppressWarnings("unchecked")
	public ActionForward modificar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		ArrayList<UnidadOrganizativa> listaUnidadesOrganizativas = (ArrayList<UnidadOrganizativa>)request.getSession().getAttribute("listaAreas");
		String indexUnidad = request.getParameter("index");
		UnidadOrganizativa unidadOrganizativa = listaUnidadesOrganizativas.get(Integer.parseInt(indexUnidad));
		request.getSession().setAttribute("unidad", unidadOrganizativa);
		return mapping.findForward("modificarUnidadOrganizativa");
	}
	
	@SuppressWarnings("unchecked")
	public ActionForward borrar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response){
		
		ArrayList<UnidadOrganizativa> listaUnidadesOrganizativas = (ArrayList<UnidadOrganizativa>)request.getSession().getAttribute("listaAreas");
		String indexUnidad = request.getParameter("index");
		UnidadOrganizativa unidad = listaUnidadesOrganizativas.get(Integer.parseInt(indexUnidad));
		request.setAttribute("unidad", unidad);
		UnidadOrganizativaDAO dao = UnidadOrganizativaDAO.getInstance();
		try{
			dao.borrarUnidadOrganizativa(unidad);
		}catch(UnableToDeleteException e){
			return mapping.findForward("failure");
		}
		return mapping.findForward("success");
	}
	
	public ActionForward confirmaModificar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		UnidadOrganizativa unidad = (UnidadOrganizativa)request.getSession().getAttribute("unidad");
		ActualizaUnidadOrganizativaForm unidadForm = (ActualizaUnidadOrganizativaForm)form;
		unidad.setNombreUnidad(unidadForm.getNombreUnidad());
		
		UnidadOrganizativaDAO dao = UnidadOrganizativaDAO.getInstance();
		UnidadOrganizativa uniSuperior = null;
		if(unidadForm.getIdUnidadSuperior() != 0){
			uniSuperior = dao.getUnidadOrganizativa(new Integer(unidadForm.getIdUnidadSuperior()));  
		}
		EmpleadosDAO empleadosDao = EmpleadosDAO.getInstance();
		Empleado responsable = empleadosDao.getEmpleado(new Integer(unidadForm.getResponsable()));
		unidad.setUnidadSuperior(uniSuperior);
		unidad.setResponsable(responsable);
		
		dao.actualizarUnidadOrganizativa(unidad);
		return mapping.findForward("success");
	}

}
